import request from '@/utils/request'

/**
 * 获取论坛帖子列表
 * @param {Object} params 查询参数，包含分页信息、排序条件等
 * @returns {Promise} 帖子列表
 */
export function getPosts(params) {
  return request({
    url: '/forum/posts',
    method: 'get',
    params
  })
}

/**
 * 获取帖子详情
 * @param {number} id 帖子ID
 * @returns {Promise} 帖子详情，包含评论列表
 */
export function getPostDetail(id) {
  return request({
    url: `/forum/posts/${id}`,
    method: 'get'
  })
}

/**
 * 发布新帖子
 * @param {Object} data 帖子数据，包含标题、内容等
 * @returns {Promise} 请求结果
 */
export function createForumPost(data) {
  return request({
    url: '/forum/posts',
    method: 'post',
    data
  })
}

/**
 * 更新帖子
 * @param {number} id 帖子ID
 * @param {Object} data 更新数据
 * @returns {Promise} 请求结果
 */
export function updateForumPost(id, data) {
  return request({
    url: `/forum/posts/${id}`,
    method: 'put',
    data
  })
}

/**
 * 删除帖子
 * @param {number} id 帖子ID
 * @returns {Promise} 请求结果
 */
export function deleteForumPost(id) {
  // 优先使用管理员接口删除帖子
  return request({
    url: `/admin/forum/posts/${id}`,
    method: 'delete'
  }).catch(error => {
    console.log('管理员接口删除帖子失败，尝试使用普通接口', error);
    // 如果管理员接口失败，尝试使用普通接口
    return request({
      url: `/forum/posts/${id}`,
      method: 'delete'
    });
  });
}

/**
 * 发表评论
 * @param {number} postId 帖子ID
 * @param {Object} data 评论数据
 * @returns {Promise} 请求结果
 */
export function createComment(postId, data) {
  return request({
    url: `/forum/posts/${postId}/comments`,
    method: 'post',
    data
  })
}

/**
 * 删除评论
 * @param {number} postId 帖子ID
 * @param {number} commentId 评论ID
 * @returns {Promise}
 */
export function deleteComment(postId, commentId) {
  if (!postId || !commentId) {
    console.error('删除评论时参数不完整', { postId, commentId });
    return Promise.reject(new Error('参数不完整'));
  }
  
  console.log(`删除评论 - postId: ${postId}, commentId: ${commentId}`);
  
  return request({
    url: `/forum/posts/${postId}/comments/${commentId}`,
    method: 'delete'
  });
}

/**
 * 点赞帖子
 * @param {number} id 帖子ID
 * @returns {Promise} 请求结果
 */
export function likePost(id) {
  return request({
    url: `/forum/posts/${id}/like`,
    method: 'post'
  })
}

/**
 * 取消帖子点赞
 * @param {number} postId 帖子ID
 * @returns {Promise} 请求结果
 */
export function unlikePost(postId) {
  return request({
    url: `/forum/posts/${postId}/unlike`,
    method: 'post'
  })
}

/**
 * 点赞评论
 * @param {number} commentId 评论ID
 * @returns {Promise} 请求结果
 */
export function likeComment(commentId) {
  return request({
    url: `/forum/comments/${commentId}/like`,
    method: 'post'
  })
}

/**
 * 取消评论点赞
 * @param {number} commentId 评论ID
 * @returns {Promise} 请求结果
 */
export function unlikeComment(commentId) {
  return request({
    url: `/forum/comments/${commentId}/unlike`,
    method: 'post'
  })
}

// 获取我的帖子列表
export function getMyPosts(params) {
  const token = localStorage.getItem('token');
  // 确保token格式正确
  const formattedToken = token ? (token.startsWith('Bearer ') ? token : `Bearer ${token}`) : '';
  
  return request({
    url: '/forum/my-posts',
    method: 'get',
    params,
    headers: {
      Authorization: formattedToken
    }
  })
}

/**
 * 获取评论列表
 * @param {number} postId 帖子ID
 * @param {Object} params 查询参数
 * @returns {Promise} 评论列表
 */
export function getComments(postId, params) {
  return request({
    url: `/forum/posts/${postId}/comments`,
    method: 'get',
    params
  }).then(response => {
    return response;
  }).catch(error => {
    console.error('获取评论失败:', error);
    throw error;
  });
}

// 搜索帖子
export function searchPosts(keyword, params) {
  return request({
    url: '/forum/posts/search',
    method: 'get',
    params: { ...params, keyword }
  })
}

// 获取用户的帖子
export function getUserPosts(userId, params) {
  return request({
    url: `/forum/posts/user/${userId}`,
    method: 'get',
    params
  })
}

// 获取热门帖子
export function getTrendingPosts(limit = 5) {
  return request({
    url: '/forum/posts/trending',
    method: 'get',
    params: { limit }
  })
}

// 获取最新帖子
export function getLatestPosts(params) {
  return request({
    url: '/forum/posts/latest',
    method: 'get',
    params
  })
}

// 获取所有分类
export function getCategories() {
  return request({
    url: '/forum/categories',
    method: 'get'
  })
}

// 获取分类详情
export function getCategoryById(id) {
  return request({
    url: `/forum/categories/${id}`,
    method: 'get'
  })
}

// 创建分类
export function createCategory(data) {
  return request({
    url: '/forum/categories',
    method: 'post',
    data
  })
}

// 更新分类
export function updateCategory(id, data) {
  return request({
    url: `/forum/categories/${id}`,
    method: 'put',
    data
  })
}

// 删除分类
export function deleteCategory(id) {
  return request({
    url: `/forum/categories/${id}`,
    method: 'delete'
  })
}

// 获取论坛统计数据
export function getForumStats() {
  return request({
    url: '/forum/stats',
    method: 'get'
  })
}

/**
 * 收藏帖子
 * @param {number} id 帖子ID
 * @returns {Promise} 收藏结果
 */
export function favoritePost(id) {
  return request({
    url: `/forum/posts/${id}/favorite`,
    method: 'post'
  })
}

/**
 * 取消收藏帖子
 * @param {number} id 帖子ID
 * @returns {Promise} 取消收藏结果
 */
export function unfavoritePost(id) {
  return request({
    url: `/forum/posts/${id}/favorite`,
    method: 'delete'
  })
}

/**
 * 获取收藏状态
 * @param {number} id 帖子ID
 * @returns {Promise} 是否已收藏
 */
export function checkFavoriteStatus(id) {
  return request({
    url: `/forum/posts/${id}/favorite`,
    method: 'get'
  })
}

/**
 * 获取用户的收藏列表
 * @param {Object} params 查询参数
 * @returns {Promise} 收藏列表
 */
export function getUserFavorites(params) {
  return request({
    url: '/forum/favorites',
    method: 'get',
    params
  })
}

/**
 * 管理员批准帖子
 * @param {number} id 帖子ID
 */
export function approvePost(id) {
  return request({
    url: `/admin/forum/posts/${id}/approve`,
    method: 'post'
  })
}

/**
 * 管理员隐藏帖子
 * @param {number} id 帖子ID
 */
export function hidePost(id) {
  return request({
    url: `/admin/forum/posts/${id}/hide`,
    method: 'post'
  })
}

/**
 * 获取帖子举报信息
 * @param {number} id 帖子ID
 */
export function getPostReports(id) {
  return request({
    url: `/admin/forum/posts/${id}/reports`,
    method: 'get'
  })
}

/**
 * 忽略特定举报
 * @param {number} reportId 举报ID
 */
export function dismissReport(reportId) {
  return request({
    url: `/admin/forum/reports/${reportId}/dismiss`,
    method: 'post'
  })
}

/**
 * 忽略所有对某帖子的举报
 * @param {number} postId 帖子ID
 */
export function dismissAllReports(postId) {
  return request({
    url: `/admin/forum/posts/${postId}/dismissReports`,
    method: 'post'
  })
}

/**
 * 获取所有帖子分类
 */
export function getAllCategories() {
  return getCategories()
}

/**
 * 获取论坛管理帖子列表 (管理员专用)
 */
export function getForumPosts(params) {
  return request({
    url: '/admin/forum/posts',
    method: 'get',
    params
  })
}

/**
 * 直接获取评论列表（不使用分页）
 * @param {number} postId 帖子ID
 * @returns {Promise} 评论列表
 */
export function getCommentsDirect(postId) {
  return request({
    url: `/forum/posts/${postId}/comments-direct`,
    method: 'get'
  }).then(response => {
    // 如果response本身就是数组，直接返回
    if (Array.isArray(response)) {
      return response;
    }
    
    // 详细检查响应内容
    if (!response) {
      console.error('响应对象为空');
      return [];
    }
    
    if (!response.data) {
      console.error('响应对象data属性为空');
      return [];
    }
    
    // 不管response.data是什么类型，都尝试直接返回
    return response.data;
  }).catch(error => {
    console.error('直接获取评论失败:', error);
    throw error;
  });
} 